package com.fanrenqiji.common.utils.file;

import java.awt.Image;
import java.io.ByteArrayInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;

import javax.imageio.ImageIO;

import org.springframework.web.multipart.MultipartFile;

/**
 * @author lijian E-mail:ljz0721cx@163.com
 * @version 创建时间：2015年4月13日 下午2:24:05
 * @description
 */
public class FileUtils {

	/**
	 * 校验字符集是不是图片流 前台传递过来的文件字节流
	 * 
	 * @param imageContent
	 * @return
	 */
	public static boolean isImageByte(byte[] imageContent) {
		if (imageContent == null || imageContent.length == 0) {
			return false;
		}
		Image img = null;
		InputStream is = null;
		try {
			is = new ByteArrayInputStream(imageContent);
			img = ImageIO.read(is);
			if (img == null || img.getWidth(null) <= 0
					|| img.getHeight(null) <= 0) {
				return false;
			}
			return true;
		} catch (Exception e) {
			return false;
		} finally {
			if (is != null) {
				try {
					is.close();
				} catch (IOException e) {
				}
			}
		}
	}

	/**
	 * 是否是合法图片
	 * 
	 * @param imageFullPath
	 *            图片本地绝对路径
	 * @return
	 */
	public static boolean isImageFile(String localImagePath) {
		File imgFile = new File(localImagePath);
		if (!imgFile.isFile()) {
			return false;
		}
		Image img;
		try {
			img = ImageIO.read(imgFile);
			if (imgFile.length() == 0 || img == null || img.getWidth(null) <= 0
					|| img.getHeight(null) <= 0) {
				return false;
			}
			return true;
		} catch (Exception e) {
			return false;
		}
	}

	/**
	 * 创建指定的目录。 如果指定的目录的父目录不存在则创建其目录书上所有需要的父目录。 注意：可能会在返回false的时候创建部分父目录。
	 * 
	 * @param file
	 *            要创建的目录
	 * @return 完全创建成功时返回true，否则返回false。
	 */
	public static boolean makeDirectory(File file) {
		File parent = file.getParentFile();
		if (parent != null) {
			return parent.mkdirs();
		}
		return false;
	}

	/**
	 * 创建指定的目录。 如果指定的目录的父目录不存在则创建其目录书上所有需要的父目录。 注意：可能会在返回false的时候创建部分父目录。
	 * 
	 * @param fileName
	 *            要创建的目录的目录名
	 * @return 完全创建成功时返回true，否则返回false。
	 */
	public static boolean makeDirectory(String fileName) {
		File file = new File(fileName);
		return makeDirectory(file);
	}

	/**
	 * 创建目录返回
	 * @param fileName
	 *            要创建的目录的目录名
	 * @return 完全创建成功时返回true，否则返回false。
	 */
	public static File createDirectory(String fileName) {
		File file = new File(fileName);
		makeDirectory(file);
		return file;
	}

	/**
	 * 得到文件的类型。 实际上就是得到文件名中最后一个“.”后面的部分。
	 * 
	 * @param fileName
	 *            文件名
	 * @return 文件名中的类型部分
	 * @since 0.5
	 */
	public static String getTypePart(String fileName) {
		int point = fileName.lastIndexOf('.');
		int length = fileName.length();
		if (point == -1 || point == length - 1) {
			return "";
		} else {
			return fileName.substring(point + 1, length);
		}
	}

	/**
	 * 得到文件的类型。 实际上就是得到文件名中最后一个“.”后面的部分。
	 * 
	 * @param file
	 *            文件
	 * @return 文件名中的类型部分
	 * @since 0.5
	 */
	public static String getFileType(File file) {
		return getTypePart(file.getName());
	}

	public static void main(String[] args) {
		// 创建文件夹
		Boolean isMaked = makeDirectory("F:/newFile/new");
		System.out.println("文件夹创建状态" + isMaked);
		File file = new File("F:/newFile/new/Chrysanthemum.jpg");
		System.out.println("文件类型处理：" + getFileType(file));
		System.out.println("是否是图片文件类型："
				+ isImageFile("F:/newFile/new/Chrysanthemum.jpg"));

	}

}
